Sesión 2: Visualización de datos con ggplot2

Curso: Introducción al software R para Ciencia de Datos en Salud
XXXVI CCN Huancayo - SOCIMEP 2022

Percy Soto-Becerra M.D., M.Sc(c)

Investigador Externo, Universidad Continental, Huancayo
@github/psotob91

Agosto 11, 2022

Visualización de datos

Visualización de datos


“The simple graph has brought more information to the data analyst’s mind than any other device.” — John Tukey

  • La visualización de datos es la creación y el estudio de la representación visual de los datos.

  • Muchas herramientas para visualizar datos, R es una de ellas.

  • Muchos enfoques/sistemas dentro de R para hacer visualizaciones de datos

    • ggplot2 es uno de ellos, y eso es lo que vamos a usar

{ggplot2} es un paquete de {tidyverse}

  • ggplot2 es el paquete de visualización de datos de tidyverse.

  • gg en ggplot2 significa Gramática de gráficos.

  • Inspirado en el libro Grammar of Graphics de Leland Wilkinson

Gramática de gráficos

  • Una gramática de gráficos es una herramienta que nos permite describir de manera concisa los componentes de un gráfico.

Primeros pasos con ggplot2

Aspectos básicos de ggplot2


  • Estructura de código para generar gráficos en ggplot2
ggplot(data = [dataset], 
       mapping = aes(x = [x-variable], 
                     y = [y-variable])) +
   geom_xxx() +
   other options

Datos: gapminder


  • Data disponible en paquete {dslabs}.
library(dslabs)
data(gapminder, package = "dslabs") 
  • Veamos un resumen de estos datos:
head(gapminder)
              country year infant_mortality life_expectancy fertility
1             Albania 1960           115.40           62.87      6.19
2             Algeria 1960           148.20           47.50      7.65
3              Angola 1960           208.00           35.98      7.32
4 Antigua and Barbuda 1960               NA           62.97      4.43
5           Argentina 1960            59.87           65.39      3.11
6             Armenia 1960               NA           66.86      4.55
  population          gdp continent          region
1    1636054           NA    Europe Southern Europe
2   11124892  13828152297    Africa Northern Africa
3    5270844           NA    Africa   Middle Africa
4      54681           NA  Americas       Caribbean
5   20619075 108322326649  Americas   South America
6    1867396           NA      Asia    Western Asia
  • Veamos el detalle
?gapminder

Código paso a paso

Inicia con el data.frame gapminder

ggplot(data = gapminder)

Inicia con el data.frame gapminder, mapea year a x

ggplot(data = gapminder, 
       mapping = aes(x = year))

Inicia con el data.frame gapminder, mapea year a x y mapea life_expectancy a y

ggplot(data = gapminder, 
       mapping = aes(x = year, 
                     y = life_expectancy))

Inicia con el data.frame gapminder, mapea year a x y mapea life_expectancy a y. Representa cada información con un punto

ggplot(data = gapminder, 
       mapping = aes(x = year, 
                     y = life_expectancy)) + 
  geom_point()

Inicia con el data.frame gapminder, mapea year a x y mapea life_expectancy a y. Representa cada información con un punto. Mapea continent al color de los puntos

ggplot(data = gapminder, 
       mapping = aes(x = year, 
                     y = life_expectancy, 
                     colour = continent)) + 
  geom_point()

Inicia con el data.frame gapminder, mapea year a x y mapea life_expectancy a y. Representa cada información con un punto. Mapea continent al color de los puntos. Titula el gráfico como “Esperanza de vida a lo largo del tiempo”

ggplot(data = gapminder, 
       mapping = aes(x = year, 
                     y = life_expectancy, 
                     colour = continent)) + 
  geom_point() + 
  labs(title = "Esperanza de vida a lo largo del tiempo")

Inicia con el data.frame gapminder, mapea year a x y mapea life_expectancy a y. Representa cada información con un punto. Mapea continent al color de los puntos. Titula el gráfico como “Esperanza de vida a lo largo del tiempo” y agrega el subtitulo “Datos para Africa, Americas, Asia, Europa y Oceania”

ggplot(data = gapminder, 
       mapping = aes(x = year, 
                     y = life_expectancy, 
                     colour = continent)) + 
  geom_point() + 
  labs(title = "Esperanza de vida a lo largo del tiempo", 
       subtitle = "Datos para Africa, Americas, Asia, Europa y Oceania")

Inicia con el data.frame gapminder, mapea year a x y mapea life_expectancy a y. Representa cada información con un punto. Mapea continent al color de los puntos. Titula el gráfico como “Esperanza de vida a lo largo del tiempo” y agrega el subtitulo “Datos para Africa, Americas, Asia, Europa y Oceania”.. Etiqueta los ejes x e y como “Año” y “Esperanza de Vida”, respectivamente

ggplot(data = gapminder, 
       mapping = aes(x = year, 
                     y = life_expectancy, 
                     colour = continent)) + 
  geom_point() + 
  labs(title = "Esperanza de vida a lo largo del tiempo", 
       subtitle = "Datos para Africa, Americas, Asia, Europa y Oceania", 
       x = "Año", y = "Esperanza de Vida")

Inicia con el data.frame gapminder, mapea year a x y mapea life_expectancy a y. Representa cada información con un punto. Mapea continent al color de los puntos. Titula el gráfico como “Esperanza de vida a lo largo del tiempo” y agrega el subtitulo “Datos para Africa, Americas, Asia, Europa y Oceania”. Etiqueta los ejes x e y como “Año” y “Esperanza de Vida”, respectivamente. Etiqueta la leyenda como “Continentes”

ggplot(data = gapminder, 
       mapping = aes(x = year, 
                     y = life_expectancy, 
                     colour = continent)) + 
  geom_point() + 
  labs(title = "Esperanza de vida a lo largo del tiempo", 
       subtitle = "Datos para Africa, Americas, Asia, Europa y Oceania", 
       x = "Año", y = "Esperanza de Vida", 
       colour = "Continentes")

Inicia con el data.frame gapminder, mapea year a x y mapea life_expectancy a y. Representa cada información con un punto. Mapea continent al color de los puntos. Titula el gráfico como “Esperanza de vida a lo largo del tiempo” y agrega el subtitulo “Datos para Africa, Americas, Asia, Europa y Oceania”. Etiqueta los ejes x e y como “Año” y “Esperanza de Vida”, respectivamente. Etiqueta la leyenda como “Continentes” y agrega un titulo para la fuente de datos

ggplot(data = gapminder, 
       mapping = aes(x = year, 
                     y = life_expectancy, 
                     colour = continent)) + 
  geom_point() + 
  labs(title = "Esperanza de vida a lo largo del tiempo", 
       subtitle = "Datos para Africa, Americas, Asia, Europa y Oceania", 
       x = "Año", y = "Esperanza de Vida", 
       colour = "Continentes", 
       caption = "Fuente: Gapminder data")

Inicia con el data.frame gapminder, mapea year a x y mapea life_expectancy a y. Representa cada información con un punto. Mapea continent al color de los puntos. Titula el gráfico como “Esperanza de vida a lo largo del tiempo” y agrega el subtitulo “Datos para Africa, Americas, Asia, Europa y Oceania”. Etiqueta los ejes x e y como “Año” y “Esperanza de Vida”, respectivamente. Etiqueta la leyenda como “Continentes” [y agrega un titulo para la fuente de datos. Finalmente, usa una escala de colores discreta que esté diseñada para preservar la visualización de personas con formas comunes discapacidad visual para los colores

ggplot(data = gapminder, 
       mapping = aes(x = year, 
                     y = life_expectancy, 
                     colour = continent)) + 
  geom_point() + 
  labs(title = "Esperanza de vida a lo largo del tiempo", 
       subtitle = "Datos para Africa, Americas, Asia, Europa y Oceania", 
       x = "Año", y = "Esperanza de Vida", 
       colour = "Continentes", 
       caption = "Fuente: Gapminder data") + 
  scale_colour_viridis_d()

En resumen

ggplot(data = gapminder, 
       mapping = aes(x = year, 
                     y = life_expectancy, 
                     colour = continent)) + 
  geom_point() + 
  labs(title = "Esperanza de vida a lo largo del tiempo", 
       subtitle = "Datos para Africa, Americas, Asia, Europa y Oceania", 
       x = "Año", y = "Esperanza de Vida", 
       colour = "Continentes", 
       caption = "Fuente: Gapminder data") + 
  scale_colour_viridis_d()

Inicia con el data.frame gapminder, mapea year a x y mapea life_expectancy a y.

Representa cada información con un punto.

Mapea continent al color de los puntos.

Titula el gráfico como “Esperanza de vida a lo largo del tiempo” y agrega el subtitulo “Datos para Africa, Americas, Asia, Europa y Oceania”.

Etiqueta los ejes x e y como “Año” y “Esperanza de Vida”, respectivamente.

Etiqueta la leyenda como “Continentes” [y agrega un titulo para la fuente de datos.

Finalmente, usa una escala de colores discreta que esté diseñada para preservar la visualización de personas con formas comunes discapacidad visual para los colores.

Nombre de argumentos


Se puede omitir los nombres de los dos primeros argumentos cuando construimos gráficos con ggplot2.

ggplot(data = gapminder, 
       mapping = aes(x = gdp, 
                     y = life_expectancy, 
                     colour = continent)) + 
  geom_point() + 
  scale_colour_viridis_d()
ggplot(gapminder, 
       aes(x = gdp, 
           y = life_expectancy, 
           colour = continent)) + 
  geom_point() + 
  scale_colour_viridis_d()

Transformar variables para mejorar visualización

Se puede realizar transformaciones sobre la marcha de las variables en los gráficos de ggplot2

ggplot(data = gapminder, 
       mapping = aes(x = gdp, 
                     y = life_expectancy, 
                     colour = continent)) + 
  geom_point() + 
  labs(title = "PBI y esperanza de vida", 
       subtitle = "Datos para Africa, Americas, Asia, Europa y Oceania", 
       x = "Producto Bruto Interno", 
       y = "Esperanza de Vida", 
       colour = "Continentes", 
       caption = "Fuente: Gapminder data") + 
  scale_colour_viridis_d()

ggplot(data = gapminder, 
       mapping = aes(x = log(gdp), #< Ponemos log()
                     y = life_expectancy, 
                     colour = continent)) + 
  geom_point() + 
  labs(title = "PBI y esperanza de vida", 
       subtitle = "Datos para Africa, Americas, Asia, Europa y Oceania", 
       x = "Logaritmo de Producto Bruto Interno", #< Editamos nombre
       y = "Esperanza de Vida", 
       colour = "Continentes", 
       caption = "Fuente: Gapminder data") + 
  scale_colour_viridis_d()

Estéticas

Opciones de estéticas


Las características comunmente usadas en los gráficos que pueden ser mapeadas a variables específicas en los datos:

  • color

  • forma

  • tamaño

  • alfa (transparencia)

Color

ggplot(data = gapminder2, 
       mapping = aes(x = year, 
                     y = life_expectancy_mean, 
                     colour = continent)) + 
  geom_point() + 
  scale_colour_viridis_d()

Forma

  • Forma mapeda a variable adicional
ggplot(data = gapminder2, 
       mapping = aes(x = year, 
                     y = life_expectancy_mean, 
                     colour = continent, 
                     shape = region)) + 
  geom_point() + 
  scale_colour_viridis_d()

Forma

  • Forma mapeda a la misma variable

::: {.column width = ‘50%’}

ggplot(data = gapminder2, 
       mapping = aes(x = year, 
                     y = life_expectancy_mean, 
                     colour = continent, 
                     shape = continent)) + 
  geom_point() + 
  scale_colour_viridis_d()

::::

Tamaño

ggplot(data = gapminder2, 
       mapping = aes(x = year, 
                     y = life_expectancy_mean, 
                     colour = continent, 
                     shape = continent, 
                     size = population_total)) + 
  geom_point() + 
  scale_colour_viridis_d()

Alfa

ggplot(data = gapminder2, 
       mapping = aes(x = year, 
                     y = life_expectancy_mean, 
                     colour = continent, 
                     shape = continent, 
                     size = population_total, 
                     alpha = population_total)) + 
  geom_point() + 
  scale_colour_viridis_d()

Mapping vs. Setting

Mapping

ggplot(data = gapminder2, 
       mapping = aes(x = year, 
                     y = life_expectancy_mean, 
                     colour = continent, 
                     shape = continent, 
                     size = population_total, 
                     alpha = population_total)) + 
  geom_point() + 
  scale_colour_viridis_d()

Setting

ggplot(data = gapminder2, 
       mapping = aes(x = year, 
                     y = life_expectancy_mean, 
                     colour = continent, 
                     shape = continent)) + 
  geom_point(size = 2, alpha = 0.5) + 
  scale_colour_viridis_d()

Mapping vs. Setting


  • Mapping: Determina el tamaño, alfa, etc. de los puntos basados en el valor de un variable en los datos:

    • Se configura como: aes()
  • Mapping: Determina el tamaño, alfa, etc. de los puntos SIN basarse en el valor de un variable en los datos:

    • Se configura como: geom_* (en este caso fue geom_point, pero hay otras geometrías más)

Faceting


  • Puntos pequeños pueden mostrar diferentes subconjuntos de los datos.

  • Útil para explorar relaciones condicionales y grandes datos

Faceting

ggplot(data = gapminder, 
       mapping = aes(x = year, 
                     y = life_expectancy)) + 
  geom_point() + 
  facet_grid(continent) + 
  scale_colour_viridis_d()

Varias formas de faceting

ggplot(data = gapminder, 
       mapping = aes(x = year, 
                     y = life_expectancy)) + 
  geom_point() + 
  facet_grid(continent ~ .) + 
  scale_colour_viridis_d()

Varias formas de faceting

ggplot(data = gapminder, 
       mapping = aes(x = year, 
                     y = life_expectancy)) + 
  geom_point() + 
  facet_wrap(~ continent) + 
  scale_colour_viridis_d()






Preguntas?





Muchas gracias!